package com.mindframe.pruebasmapas;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;

public class BaseDatos extends SQLiteOpenHelper{
	
	
//	List<Punto> listaPuntos = new ArrayList<Punto>();
	private static String TABLE_NAME = "PUNTOS";
	public static final String[] COLUMNAS_PUNTOS = {"_id", "LATITUD", "LONGITUD", "NOMBRE", "DESCRIPCION"};
	
	
	public static class columnas implements BaseColumns{
		
		public static final String LATITUD = "latitud";
		public static final String LONGITUD = "longitud";
		public static final String NOMBRE = "nombre";
		public static final String DESCRIPCION = "descripcion";
		
		
		
	}
	
	//String sqlCreateTable = "CREATE TABLE PUNTOS(_ID INTEGER PRIMARY KEY, LATITUD TEXT NOT NULL, LONGITUD TEXT NOT NULL, NOMBRE TEXT, DESCRIPCION TEXT)";
	SQLiteDatabase db;
	public BaseDatos(Context context, String name, CursorFactory factory, int version) {
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		StringBuilder sb = new StringBuilder();
		
		sb.append("CREATE TABLE " + TABLE_NAME+ " (");
		sb.append(BaseColumns._ID + " INTEGER PRIMARY KEY, ");
		sb.append(columnas.LATITUD + " TEXT NOT NULL, ");
		sb.append(columnas.LONGITUD + " TEXT NOT NULL, ");
		sb.append(columnas.NOMBRE + " TEXT, ");
		sb.append(columnas.DESCRIPCION + " TEXT");
		sb.append(");");
//		db = this.getWritableDatabase();
		db.execSQL(sb.toString());
		db.close();
		
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		db = this.getWritableDatabase();
		db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
//		db.execSQL(sqlCreateTable);
	}
	
	public void savePunto(Punto punto ){
		
		ContentValues registro = new ContentValues();
		
		registro.put(columnas.LATITUD, punto.getLatitud());
		registro.put(columnas.LONGITUD,punto.getLongitud());
		registro.put(columnas.NOMBRE, punto.getNombre());
		db = this.getWritableDatabase();
		registro.put(columnas.DESCRIPCION, punto.getDescripcion());
		db.insert(TABLE_NAME, null, registro);
		db.close();
		
	}
	
	public List<Punto> getListaPuntos(){
		
		db = this.getReadableDatabase();
		List<Punto> listaPuntos = new ArrayList<Punto>();
		Cursor c = db.query(TABLE_NAME, COLUMNAS_PUNTOS, null, null, null, null, null);
		
		if(c.moveToFirst()){
			do{
				Punto punto = new Punto();
				punto.set_id(c.getString(0));
				punto.setLatitud(c.getString(1));
				punto.setLongitud(c.getString(2));
				punto.setNombre(c.getString(3));
				punto.setDescripcion(c.getString(4));
				
				listaPuntos.add(punto);
			}while(c.moveToNext());
		}
		
		db.close();
		return listaPuntos;
		
	}
	
	public boolean existePunto(Punto p){
		
		boolean found = false;
		
		List<Punto> listaPuntos = this.getListaPuntos();
	
		for(Punto pun:listaPuntos){
			if(pun.compareTo(p)){
				return true;
			}
		}
		
		return found;
	}
	
	public Punto getPuntoById(String _id){
		Punto punto = new Punto();
		db = this.getWritableDatabase();

		Cursor c = db.query(TABLE_NAME, COLUMNAS_PUNTOS, "_ID = " +_id, null, null, null, null);
		
		if(c.moveToFirst()){
			do{
				punto.set_id(c.getString(0));
				punto.setLatitud(c.getString(1));
				punto.setLongitud(c.getString(2));
				punto.setNombre(c.getString(3));
				punto.setDescripcion(c.getString(4));
				
			}while(c.moveToNext());
		}
		
		
		db.close();
		return punto;
	}
	
	public void editPunto(String _id, String nombre, String desc){
		
		db = this.getWritableDatabase();
		
		ContentValues valores = new ContentValues();
		
		valores.put(columnas.NOMBRE, nombre);
		valores.put(columnas.DESCRIPCION, desc);
		db.update(TABLE_NAME, valores, "_id="+_id, null);
		
		db.close();
		
	}
	
	public void deletePunto(String _id){
		db = this.getWritableDatabase();
		
		int del = db.delete(TABLE_NAME, "_id = " +_id, null);
		
		Log.d("deletePunto", String.valueOf(del));
		
		db.close();
	}
		
}
